import axios from 'axios'
import {Message, Loading} from 'element-ui';


const basePath = process.env.VUE_APP_BASE_API

// 定义 loading
let loading

// loading开始 方法
function startLoading() {
    // element-ui loading 服务调用方式
    loading = Loading.service({
        lock: true,
        text: '拼命加载中...',
        spinner: 'el-icon-loading',  // 自定义图标
        background: 'rgba(0, 0, 0, 0.7)',
        customClass: 'loadingclass'
    })
}

// loading结束 方法
function endLoading() {
    loading.close()
}


// 创建axios实例
const http = axios.create({
    // axios中请求配置有baseURL选项，表示请求URL公共部分
    baseURL: basePath,
    // 超时
    timeout: 6000000,
    withCredentials: true
})


//请求拦截
http.interceptors.request.use((config) => {
    const token = sessionStorage.getItem("token");
    const params = sessionStorage.getItem("params");
    if (token && config.headers['Authorization'] === undefined) {
        config.headers['Authorization'] = 'Bearer ' + token
    }
    if (token && config.headers['params'] === undefined) {
        config.headers['params'] = params
    }
    // 请求显示loading 效果
    // startLoading();

    return config;
}, (error) => {
    //结束loading
    // endLoading();
    return Promise.reject(error);
})

//添加响应拦截器
http.interceptors.response.use(
    response => {
        // endLoading();
        let responseURL = response.request.responseURL;
        let reg = RegExp(/kaptcha/);
        if (response.status === 200 && !reg.exec(responseURL)) {
            return response.data;
        } else if (response.status === 500) {
            handleErrorData(response.data);
        }
        return response;
    },
    error => {
        // endLoading();
        constomError(error)
        // 对响应错误做点什么
        // Message.error(error.response.data.message);
        return Promise.reject(error);
    }
);


function constomError(error) {
    if (error.hasOwnProperty('response')) {
        switch (error.response.status) {
            case 401 :
                Message.error("未授权，请重新登录!");
                break;
            case 403 :
                Message.error("拒绝访问");
                break;
            case 404 :
                Message.error("很抱歉，资源未找到!");
                break;
            case 500 :
                Message.error(error.response.data.message);
                break;
            case 504 :
                Message.error("网络超时!");
                break;
            default :
                Message.error("服务正在联调中，请稍后!");
                break;
        }
    } else {
        Message.error("系统异常请联系工作人员603606739@qq.com")
    }
}


//对错误信息的处理函数
function handleErrorData(errMes) {
    if (errMes.message) {
        Message.error(errMes.message);
    } else {
        switch (errMes.code) {
            case 401 :
                Message.error("未授权，请重新登录!");
                break;
            case 403 :
                Message.error("拒绝访问");
                break;
            case 404 :
                Message.error("很抱歉，资源未找到!");
                break;
            case 500 :
                Message.error("服务器错误!");
                break;
            case 504 :
                Message.error("网络超时!");
                break;
            default :
                Message.error("服务正在联调中，请稍后!");
                break;
        }
    }
}


export default http
